﻿using System;
using System.Windows.Forms;
using VentaElectrodomesticos.Sql;
using VentaElectrodomesticos.Utilities;
using System.Data.SqlClient;

namespace VentaElectrodomesticos.AbmProducto
{
    public partial class FormAltaProducto : Form
    {
        private ClaseSQL sql = new ClaseSQL();
        private KeyValuePair categoria;

        public FormAltaProducto()
        {
            InitializeComponent();
        }

        private void btnCategoria_Click(object sender, EventArgs e)
        {
            FormSeleccionCategoria formCategoria = new FormSeleccionCategoria(this,"altaProducto");
            formCategoria.ShowDialog();
        }

        public void recibirCategoria(KeyValuePair _categoria)
        {
            this.tbCategoria.Text = _categoria.Value.ToString();
            this.categoria = _categoria;
        }

        private void btnGuardar_Click(object sender, EventArgs e)
        {
            if (this.validarCampos())
            {
                try
                {
                    sql.Open();

                    String query = "INSERT INTO LAG.productos (nomProducto, marca, descProducto, idCategoria, precio)" +
                        "VALUES ('" + tbNombre.Text + "', '" + tbMarca.Text + "', '" + tbDescripcion.Text + "', '" + categoria.Key.ToString() + "', " +
                        tbPrecio.Text.Replace(',','.') + ")";

                    int filasAfectadas = sql.ejecutarNoReader(query);
                    this.btnLimpiar_Click(null, null);
                    MessageBox.Show("Se ha dado de alta exitosamente", "Exito!");
                }
                catch (SqlException ex)
                {
                    MessageBox.Show(ex.Message, "Error al intentar guardar");
                }
                finally
                {
                    sql.Close();
                }
            }
            else
            {
                MessageBox.Show("Hay campos con datos no validos", "Error");
            }
        }

        private bool validarCampos()
        {
            bool vPrecio = this.validarPrecio();
            bool vNombre = !Utils.campoVacio(tbNombre, errorProvider, "Ingrese un nombre");           
            bool vMarca = !Utils.campoVacio(tbMarca, errorProvider, "Ingrese una marca");
            bool vDescripcion = !Utils.campoVacio(tbDescripcion, errorProvider, "Ingrese una descripcion");
            bool vCategoria = !Utils.campoVacio(tbCategoria, errorProvider, "Seleccione una categoria");

            return vPrecio && vNombre && vMarca && vDescripcion && vCategoria;
        }

        private bool validarPrecio()
        {
            bool valido = true;
            float i;

            bool parseoExitoso = float.TryParse(tbPrecio.Text.Trim(), out i);
            
            if (tbPrecio.Text.Trim().Length == 0)
            {
                valido = false;
                errorProvider.SetError(tbPrecio, "Ingrese un precio");
            }
            else if (!parseoExitoso)
            {
                valido = false;
                errorProvider.SetError(tbPrecio, "Ingrese un precio valido");
            }
            else if (i <= 0)
            {
                valido = false;
                errorProvider.SetError(tbPrecio, "El precio ingresado debe ser mayor a 0");
            }
            else
            {
                errorProvider.SetError(tbPrecio, "");
            }

            return valido;
        }


        private void ingresarSoloNumericos(object sender, KeyPressEventArgs e)
        {
            if (!System.Text.RegularExpressions.Regex.IsMatch(e.KeyChar.ToString(), @"\u0008|,|[0-9]+"))
                e.Handled = true;
        }

        private void btnLimpiar_Click(object sender, EventArgs e)
        {
            Utils.ClearTextBoxes(this);
        }

    }
}
